#ifndef __RF_DECODE_H
#define __RF_DECODE_H

#define   	s8    signed char
#define		s16   signed short int
#define		s32   signed int 

#define		u8    unsigned char 
#define		u16   unsigned short int 
#define		u32   unsigned int 


typedef union radio_w
{
	u32 u32_data;
	u8  check0:4;
	u8  check1:4;
	u8  check2:4;
	u8  check3:4;
	u8  check4:4;
	u8  check5:4;
	u8  check6:4;
	u8  check7:4;	
}radio_w;

typedef union byte_radio                                         //联合体结构,用于存取433数据
{
	u8    u8_byte[4];
	u32   u32_byte;
}byte_u;

typedef struct radio                                             //归零码结构体
{
	byte_u    rzero;                                             //433数据结构
	byte_u    addr[10];
	u8   codeval;	
	u8   u8_low_counter;                                        //归零位高电平时间计数
	u8   u8_high_counter;                                       //归零位低电平时间计数
	u8   u8_sample_counter;                                     //归零位时间计数
	u8   u8_rzero_counter;                                      //归零位计数,0-32
	u8   code;                                                  //有效433数据
	u8   code_lock;                                             //有效433数据锁定,防抖?
	u8   code_last;
	u8   code_long;                                             //有效长按数据
	u8   bit_start: 1;                                          //50us定时标志位
	u8   bit_err:   1;                                          //归零码错误标志位
	u8   bit_last:  1;                                          //电平最后标志位
	u8   bit_code_ok;                                           //对码成功标志位
	u8   bit_code_end:  1;                                      //复位对码结束标志位置,复位后2s对码结束。
	u8   bit_code_ok_f: 1;                                      //清除对码标志位
	u16  u16_radio_counter;                                     //无线遥控结束计数器
	u32  code_last_counter;
	u32   T_code_cnt;                                           //50us计数
}RADIO_T;


typedef struct
{
	u8		OnOff;
	u8		Timing_Flag;
	u8		Timing_FPre;
	u8		Mode_Fan;
	u8		FR;
	u8		SWH_Flag;
	u8		Step_Flag;
	u8		ControlSpeed;
	u8		ControlFR;
	u8		Flag;	
	u8		Code;
	u8		OldCode;
	u8		SpeedNum;
	u8		TimingNum;
	volatile u8		Screenoff_Flag;	
	u16		Time_min;
	u16		Time_Switch;
	s32		Speed;
	u32		Timing_Time;
	u16		Screenoff_Time;
	
}KEY_T;

typedef struct
{

	u16		Period;

	
}BEEP_T;

typedef struct
{

	u16		StepDEG0;
	u16		Disp_Switch;
	u16		Count_min;
	u16		Count_second;
	u16		Count_hour;
}TIME_T;

typedef struct
{
	u8		Step_FR:1;
	u8		Step_RET:1;
	u8		Step_Save:1;
	u8		Step_Led:1;
	u8		Time_Min:1;
	u8		Time_Sec:1;
}FLAG_T;

#define	LP_SLEEP				0X01
#define	LP_WAKEUP				0X02
#define	LP_RUN					0X03
#define	LP_WAIT					0X04

#define BUZZER_ON() 			{CCP_EnableRun(CCP0);}
#define BUZZER_OFF() 			{CCP_DisableRun(CCP0);IO_BEEP = 0;}

#define SWHEAD_ON() 			{SYS_SET_IOCFG(IOP32CFG, SYS_IOCFG_P32_CCP1B);SYS_SET_IOCFG(IOP46CFG, SYS_IOCFG_P46_CCP1A;);/*CCP_EnableRun(CCP1);*/}
#define SWHEAD_OFF() 			{SYS_SET_IOCFG(IOP32CFG, SYS_IOCFG_P32_GPIO);SYS_SET_IOCFG(IOP46CFG, SYS_IOCFG_P46_GPIO);/*CCP_DisableRun(CCP1)*/;\
								 MX500H_A=0;MX500H_B=0;GPIO_CONFIG_IO_MODE(GPIO3,GPIO_PIN_2,GPIO_MODE_OUTPUT);	GPIO_CONFIG_IO_MODE(GPIO4,GPIO_PIN_6,GPIO_MODE_OUTPUT);	}

								 
#define STEPMOTOR_ON() 			{/*TMR_EnableOverflowInt(TMR0);*/Step.Number =100;}
#define STEPMOTOR_OFF() 		{/*TMR_DisableOverflowInt(TMR0);*/Step.Number = 0;}

#define SAMPLE_TIME  62//100//                                          //50us
#define TIME_MAX     750                                         //归零位高低电平持续时间最大900us左右
#define TIME_MIN     250                                         //归零位高低电平持续时间最小300us左右
#define TIME_BIT     1000                                        //归零位持续时间1200us左右
#define TIME_COUNTER_MAX   14//( ( TIME_MAX / SAMPLE_TIME ) + 2 )    //归零位高低电平最大计数
#define TIME_COUNTER_MIN   2//( ( TIME_MIN / SAMPLE_TIME ) - 2 )    //归零位高低电平最小计数
#define TIME_BIT_CT_MAX    18//( ( TIME_BIT / SAMPLE_TIME ) + 2 )    //归零位最大计数
#define TIME_BIT_CT_MIN    14//( ( TIME_BIT / SAMPLE_TIME ) - 2 )    //归零位最大计数

#define RZERO_MAX   24                                           //归零码最大计数            
  
#define CODE_CODE    0x06                                         //遥控器对码代码
#define LIGHT_CODE   0x08                                         //遥控器对码代码

#define CODE_CNT     50                                           //遥控器对码指计数 //38.8ms周期
#define KEY_END_CNT  2000                                         //按键释放计数,50us对应100ms
#define PIN_READ     GPIO3->DI_f.P6                               //遥控器数据管脚
#define ADDR_FLASH   0x4400                                       //Flash数据保存地址
#define ADDR_CNT     5                                            //Flash中的地址数量

extern RADIO_T t_radio;                                          //归零码结构体外部调用声明

extern KEY_T	t_key;
extern void init_radio(void);                                     //数据初始化函数
u8 aly_data(void);                                          	  //归零码解析函数,调用后清零  
void aly_rzero(void);                                             //归零位解析函数   
extern void elec_read(void);                                      //电平扫描函数  
void flash_read_u32Data(void);                                    //flash读32位数据函数 
void flash_write_u32Data(void);                                   //flash写32位数据函数
extern void task_radio(void);
extern void u_buzzer(void);
extern void Buzzer_Warning(void);
#endif

